import itertools

# 因为count()会创建一个无限的迭代器，所以上述代码会打印出自然数序列，根本停不下来，只能按Ctrl+C退出
natuals = itertools.count(1)
# for n in natuals:
#     print(n)


# cycle()会把传入的一个序列无限重复下去
cs = itertools.cycle('ABC') # 注意字符串也是序列的一种
# for n in cs:
#     print(n)

# repeat()负责把一个元素无限重复下去，不过如果提供第二个参数就可以限定重复次数
re = itertools.repeat('H',3)
# for n in re:
#     print(n)

# 无限序列只有在for迭代时才会无限地迭代下去，如果只是创建了一个迭代对象，它不会事先把无限个元素生成出来，
# 事实上也不可能在内存中创建无限多个元素。
# 无限序列虽然可以无限迭代下去，但是通常我们会通过takewhile()等函数根据条件判断来截取出一个有限的序列
# natuals10 = itertools.takewhile(lambda x:x<10,natuals)
# for n in natuals10:
#     print(n)

# chain()可以把一组迭代对象串联起来，形成一个更大的迭代器
# for n in itertools.chain('ABC','XYZ'):
    # print(n)

# groupby()把迭代器中相邻的重复元素挑出来放在一起
for key, group in itertools.groupby('AAABBBCCAAA'):
    print(key, list(group))

